home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / grass / src / com_turn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-08  |  4.0 KB  |  225 lines

  1.  
  2. /*
  3.     コンピューターのターンのサブルーチン
  4.  
  5.         By 五味
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <sub.h>
  11.  
  12. void get_tre(void);
  13. int  battle(void);
  14.  
  15. /*    変数表
  16.  
  17.     xx    ロングバッファ
  18.     yy      〃
  19.     zz      〃
  20.     thp    敵の生命力(HP)
  21. */
  22.  
  23.     extern int turn,gold,f,i,j,o,k[],hp[],x[],y[],tx[],ty[];
  24.     extern int mx[],my[],ht[],th[],dhp[],s[],bx[],by[],be[];
  25.     extern char c,*nn[],*tt[];
  26.     long xx,yy,zz;
  27.     int thp,b;
  28.  
  29. char    *bossmes[]={
  30. " ネイヴ「地獄の業火で焼き尽くしてくれる!」\n\n",
  31. " アウチストマック「この俺が誰だと知っていて、戦おうと言うのか?」\n\n",
  32. " リュート「私の召び出す精霊たちを破れますか?」\n\n",
  33. " フェネス「戦っても無駄だって言っているんだよ。」\n\n",
  34. " トゥースエイク「僕の剣さばきに踊ってみるかい?」\n\n"
  35. };
  36.  
  37. com_turn()
  38. {
  39.  
  40.     printf(" 各部隊、行動に移ります。\n\n");
  41.  
  42.     f=0;
  43.     for( i=0 ; i<100 ; i++ )
  44.         {
  45.  
  46. /*
  47.  
  48.     移動処理
  49.  
  50. */
  51.  
  52.         if( k[i]!=-1 )
  53.             {
  54.             f++;
  55.             xx  =mx[i]-x[i];
  56.             yy  =my[i]-y[i];
  57.             zz  =s[k[i]];
  58.             zz *=zz;
  59. /*
  60. printf(" 第%2d部隊 %-16s 座標(%3d,%3d) 目的地(%3d,%3d)\n",i+1,nn[k[i]],x[i],y[i],mx[i],my[i]);
  61. */
  62.             if( ((xx*xx)+(yy*yy))<zz )
  63.                 {
  64.                 x[i]  = mx[i];
  65.                 y[i]  = my[i];
  66.                 }
  67.             else
  68.                 {
  69.             x[i] +=(int)(xx*(long)s[k[i]]/(labs(xx)+labs(yy)));
  70.             y[i] +=(int)(yy*(long)s[k[i]]/(labs(xx)+labs(yy)));
  71.                 }
  72.             }
  73.  
  74. /*
  75.  
  76.     ワンダリング・エネミーとの遭遇
  77.  
  78. */
  79.  
  80.         if( k[i]!=-1 && random(10)==0 )
  81.             {
  82.             j = random(20);
  83. printf(" 第%2d部隊の%sが、敵の%sと遭遇したようです!\n\n",i+1,nn[k[i]],nn[j]);
  84.             getch();
  85.             thp = dhp[j];
  86.  
  87.             b=0;
  88.             battle();    /* battle.c */
  89.  
  90.             }
  91.  
  92. /*
  93.  
  94.     砦の攻防
  95.  
  96. */
  97.  
  98.         if( k[i]!=-1 )
  99.             {
  100.             for( j=0 ; j<5 ; j++ )
  101.                 {
  102.                 xx  =tx[j]-x[i];
  103.                 yy  =ty[j]-y[i];
  104.                 if( ((xx*xx)+(yy*yy))<100 )
  105.                     {
  106.                     if( ht[j] == 0 )
  107.                         {
  108. printf(" 第%2d部隊の%sが、敵の砦を発見したそうです!\n\n",i+1,nn[k[i]]);
  109.                         getch();
  110. printf(" 砦の城主は、どうやら%sのようです。\n",nn[j+20]);
  111. printf(" 取り合えず攻撃はしません。\n\n");
  112.                         getch();
  113.                         ht[j]=1;
  114.                         }
  115.                     else
  116.                         {
  117.                         if( th[j] == 0 )
  118.                             {
  119. printf(" 第%2d部隊の%sが、敵の砦を捕捉し、攻撃に移ったとの事です。\n\n",i+1,nn[k[i]]);
  120. printf(bossmes[j]);
  121.                             thp=dhp[j+20];
  122.                             b=1;
  123.                             if( battle() == 1 )
  124.                                 {
  125.                     printf(" 砦が落ちました!\n\n");
  126.                                 th[j]=1;
  127.                                 o=0;
  128.     for( b=0 ; b<5 ; b++ )
  129.         {
  130.         if( th[b] == 1 )
  131.         o++;
  132.         }
  133.                                 if( o == 5 )
  134.                                     return(2);
  135.  
  136.                                 break;
  137.                                 }
  138.                             dhp[j+20]=thp;
  139.                             }
  140.                         }
  141.                     }
  142.                 }
  143.             }
  144.  
  145.  
  146. /*
  147.  
  148.     宝発見チェック
  149.  
  150. */
  151.  
  152.         get_tre();    /* get_tre.c */
  153.  
  154.  
  155.  
  156.         if( k[i]!=-1 )
  157.             {
  158.             if( x[i]==mx[i] && y[i]==my[i] )
  159.                 {
  160. printf(" 第%2d部隊の%sが、目的地についたと報告してきました。\n",i+1,nn[k[i]]);
  161. printf(" 解雇しますか?(y/n)");
  162.                 c = getch();
  163.                 if( c=='y' || c=='Y' )
  164.                     {
  165.             printf("\n\n %sを解雇しました。\n\n",nn[k[i]]);
  166.                     k[i] = -1;
  167.                     getch();
  168.                     }
  169.                 else
  170.                     {
  171.                 do
  172.                     {
  173.         printf("\n\n %sを、どこへ向かわせますか?\n",nn[k[i]]);
  174.         printf(" 現在位置は(%3d,%3d)です。\n\n",x[i],y[i]);
  175.  
  176.                     do    {
  177.                     printf("\tX座標(0~200)=");
  178.                         j = getnum();
  179.                         printf("\n");
  180.                         }while( j<0 || j>200 );
  181.                     mx[i] = j;
  182.  
  183.                     do    {
  184.                     printf("\tY座標(0~200)=");
  185.                         j = getnum();
  186.                         printf("\n");
  187.                         }while( j<0 || j>200 );
  188.                     my[i] = j;
  189.  
  190.             printf("\n これでいいですか?(キャンセルは0)");
  191.  
  192.                     }while( getch() == '0' );
  193.  
  194.                     printf("\n\n");
  195.                     }
  196.                 }
  197.             }
  198.  
  199.  
  200.  
  201.         }
  202.  
  203.     if( f == 0 )
  204.         {
  205.         printf(" この城に所属している部隊がありません。\n");
  206.         if( gold < 5 )
  207.             {
  208.     printf(" もはや、この城には、傭兵を雇う資金もありません。\n");
  209.     printf(" 残念ですが、このままファブル軍団をのさばらせておくしか無いでしょう。しかし、いつかはこの城に攻めてくるでしょう…。\n\n");
  210.     printf("    GAME OVER\n");
  211.  
  212.             getch();
  213.             return(1);
  214.             }
  215.         else
  216.             {
  217.     printf(" 誰かを雇わないと、ゲームが進みませんよ。\n\n");
  218.     return(0);
  219.             }
  220.         }
  221.  
  222.     turn++;
  223.     return(0);
  224. }
  225.